package com.zx.system.block.service;

import com.zx.core.wrapper.ListWrapper;
import com.zx.core.wrapper.ObjectWrapper;
import com.zx.core.wrapper.ResponseWrapper;
import com.zx.system.block.model.SysRole;
import com.zx.system.block.param.RoleParam;
import com.zx.system.block.vo.SysRoleVO;

import java.util.Map;
import java.util.Set;

/**
 * <p>
 * description: 业务层角色服务 <br>
 * create: 2024-08-24 11:39
 * </p>
 *
 * @author zhou  xun
 */
public interface ISysRoleService {

    /**
     * 获取角色信息Map 用于角色信息匹配
     *
     * @return 包含角色标识符作为键, {@link SysRole} 对象作为值的映射表{@code Map<String, SysRole>}
     * @author zhou  xun
     * @since 2024-10-29
     */
    Map<String, SysRole> getRole();

    /**
     * 查询角色列表
     *
     * @param roleParam 角色参数
     * @return {@link ListWrapper<SysRole>}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ListWrapper<SysRole> selectRoleList(RoleParam roleParam);

    /**
     * 查询角色列表VO
     *
     * @param roleParam 角色参数
     * @return {@link ListWrapper<SysRoleVO>}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ListWrapper<SysRoleVO> selectRoleVOList(RoleParam roleParam);

    /**
     * 新增角色
     *
     * @param roleParam 角色参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper addRole(RoleParam roleParam);

    /**
     * 编辑角色
     *
     * @param roleParam 角色参数
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper editRole(RoleParam roleParam);

    /**
     * 编辑角色状态
     *
     * @param id     角色Id
     * @param status 角色状态 0停用 1 启用
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper editRoleStatus(String id, Integer status);

    /**
     * 删除角色
     *
     * @param roleId 角色Id
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2024-10-29
     */
    ResponseWrapper deleteRole(String roleId);

    /**
     * 角色设置权限
     *
     * @param roleId  角色Id
     * @param menuIds 菜单Id列表
     * @return {@link ResponseWrapper}
     * @author zhou  xun
     * @since 2025-04-13
     */
    ResponseWrapper roleSetMenu(String roleId, String[] menuIds);

    /**
     * 查询角色的菜单id列表
     *
     * @param roleId 角色Id
     * @return {@link  ObjectWrapper } 菜单id集合
     * @author zhou  xun
     * @since 2025-04-15
     */
    ObjectWrapper<Set<String>> selectMenuIdsByRoleId(String roleId);

    /**
     * 查询角色信息
     *
     * @param userId 用户id
     * @return {@link  ListWrapper<SysRole> } 角色集合
     * @author zhou  xun
     * @since 2025-04-17
     */
    ListWrapper<SysRole> selectRoleInfos(String userId);
}
